<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        let number = 18, person = {name: '张三'};
            
        Object.defineProperty(person, 'age', { //给对象设置参数、高级用法
            /* 
            采用(get|set)方式这3个属性要去掉
            value: number    //age参数、该方式不推荐使用、因为number值发生变化、这里并不会同步变、建议采用(get|set)方式，注意value方式和(get|set)方式2选1不能一块用
            writable:true  //age是否可以被修改，默认false
            configurable:true //age是否可以被删除，默认flase
            */

            enumerable:true //age是否可以枚举遍历，默认false, 就是、是否可以让for循环能遍历出来
            ,get:function(){ //get函数、当有人读取obj对象的age属性时,get函数就会被调用,且返回值就是age的值
                console.debug('有人读取age属性了');
                return number;
            }
            ,set:function(value){//set当有人修改person的age属性时，set函数就会被调用，且会收到修改的具体值
                console.debug('有人修改了age属性,且值是', value);
                number = value;
            }
        });

       for (let key in person) {//这里注意的是想要把age遍历出来必须设置：enumerable:true
            console.debug(key + "=" + person[key]);
       }
       //console.log("打印person对象属性: ", person);
    </script>
</head>
<body>
    
</body>
</html>